﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using PSE.Framework.UI.Settings;

namespace PSE.Framework.UI.Controls.SmartClient
{
    /// <summary>
    /// Classe que contém as configurações do DataGrid
    /// </summary>
    [Serializable]
    public class DataGridConfigurationObject : IConfigurationObject<ConfigurationObjectType>
    {
        /// <summary>
        /// Construtor padrão
        /// </summary>
        public DataGridConfigurationObject()
        {
            this.ConfigurationType = ConfigurationObjectType.Control;
            this.Columns = new List<ColumnConfigurationObject>();
            //this.GroupedColumns = new List<string>();
            this.FixedColumnCount = -1;
        }

        /// <summary>
        /// Nome do objeto de configuração
        /// </summary>
        public string ConfigurationName { get; set; }

        /// <summary>
        /// Tipo do objeto de configuração
        /// </summary>
        public ConfigurationObjectType ConfigurationType { get; set; }

        /// <summary>
        /// Configurações das colunas
        /// </summary>
        public List<ColumnConfigurationObject> Columns { get; set; }

        /// <summary>
        /// Número de colunas fixas
        /// </summary>
        public int FixedColumnCount { get; set; }
    }

    /// <summary>
    /// Classe que contém as configurações da Coluna
    /// </summary>
    [Serializable]
    public class ColumnConfigurationObject : IConfigurationObject<ConfigurationObjectType>
    {
        /// <summary>
        /// Construtor padrão
        /// </summary>
        public ColumnConfigurationObject()
        {
            this.ConfigurationType = ConfigurationObjectType.Control;
            this.Visible = true;
            this.VisiblePosition = -1;
            this.Width = -1;
            this.SortDirection = null;
        }

        /// <summary>
        /// Nome do objeto de configuração
        /// </summary>
        public string ConfigurationName { get; set; }

        /// <summary>
        /// Tipo do objeto de configuração
        /// </summary>
        public ConfigurationObjectType ConfigurationType { get; set; }

        /// <summary>
        /// Indica se a coluna está visivel
        /// </summary>
        public bool? Visible { get; set; }

        /// <summary>
        /// Posição visual da coluna
        /// </summary>
        public int VisiblePosition { get; set; }

        /// <summary>
        /// Largura da coluna
        /// </summary>
        public double Width { get; set; }

        /// <summary>
        /// Ordenação das colunas
        /// </summary>
        public ListSortDirection? SortDirection { get; set; }

        /// <summary>
        /// Ordem que a coluna foi ordenada
        /// </summary>
        public int SortIndex { get; set; }
    }
}
